package com.zh.chat.file;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.net.URISyntaxException;
import java.net.URL;
import java.text.SimpleDateFormat;

import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.configuration.XMLConfiguration;
import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy;

/**
 * Config读取系统的配置文件
 * 
 * @author Administrator
 * 
 */
public class ConfigUtil {
	public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	// java提供的用于读取.properties文件的API
	private static PropertiesConfiguration config = new PropertiesConfiguration();
	/**
	 * 初始化对象的时候就读取配置文件
	 */
	public ConfigUtil() {
		load();
	}

	/**
	 * 根据key获取对应的int型的value
	 * 
	 * @param key
	 * @return
	 */
	public int getInt(String key) {
		/**
		 * 例如：读取的properties文件是client.properties 那么当在构造方法中加载此文件后(调用过load()方法)。
		 * 可以通过Properties的getProperty()方法获取下面这项的值 QuestionNumber=20 在获取方式为：
		 * String value = table.getProperty("QuestionNumber");
		 */
		return config.getInt(key);
	}

	/**
	 * 根据key获取对应的String型value
	 * 
	 * @param key
	 * @return
	 */
	public String getString(String key) {
		return config.getString(key);
	}

	/**
	 * 根据key获取对应的double型value
	 * 
	 * @param key
	 * @return
	 */
	public double getDouble(String key) {
		return config.getDouble(key);
	}
	
	public void setPropertie(String key,String value){
		config.setProperty(key, value);
	}
	
	public void load(){
		InputStream ips = ConfigUtil.class.getClassLoader().getResourceAsStream("config.properties");
		try {
			config.setReloadingStrategy(new FileChangedReloadingStrategy());
			config.setDelimiterParsingDisabled(true);//设置标点符号的读取
			config.setAutoSave(true);
			config.setEncoding("UTF-8");
			config.load(ips);
		} catch (ConfigurationException e) {
			e.printStackTrace();
		}
	}
	
	public void save(){
		FileWriter fw = null;
		try {
			URL url=ConfigUtil.class.getClassLoader().getResource("config.properties");
			File file = new File(url.toURI());
			fw = new FileWriter(file);
			config.save(fw);
		} catch(FileNotFoundException e){
			e.printStackTrace();
		} catch (URISyntaxException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {  
                if(fw!=null){
                	fw.flush();
                    fw.close();  
                }  
            } catch (Exception e2) {}
		}
	}
	
//	public static void main(String[] args) {
//		XMLConfiguration cfg = new XMLConfiguration();
//		cfg.setRootElementName("CONFIGURATION");
//		cfg.setProperty("CLIENT_RECV_PORT", 8008);
//		cfg.setProperty("CLIENT_SEND_PORT", 8009);
//		cfg.setProperty("CLIENT_IP", "172.20.49.160");
//		cfg.setProperty("SERVER_PORT", 8005);
//		cfg.setProperty("SERVER_IP", "172.20.49.160");
//		cfg.setProperty("FILEINPORT", 8010);
//		cfg.setProperty("FILEOUTPORT", 8011);
//		cfg.setProperty("FILE_TIME_OUT", 5000);
//		
//		cfg.setProperty("MAX_PACKET_SIZE", 4096);
//				FILE_TIME_OUT=5000
//				#服务器端最大收发文本大小
//				MAX_PACKET_SIZE=4096
//				CHARSET=UTF-8
//
//				DATE_FORMAT=yyyy-MM-dd
//				TIME_FORMAT=yyyy-MM-dd HH:mm:ss
//				#发送问价你的32KB=32768
//				IMGPORT=8009
//				IMGBUFFER_SIZE=40960
//				#存放临时图片的路径
//				IMGURL=.\\image\\
//				#外观配置
//				LookAndFeel=com.sun.java.swing.plaf.windows.WindowsLookAndFeel
//	}
}
